package com.bjsxt.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 禁用CSRF保护
        http.csrf().disable();
        // 所有请求都需要进行身份验证
        http.authorizeRequests().anyRequest().authenticated();
    }

    @Bean
    protected AuthenticationManager authenticationManager() throws Exception {
        // 返回AuthenticationManager实例
        return super.authenticationManager();
    }


//    @Bean
//    public UserDetailsService userDetailsService() {
//        // 创建一个内存中的用户详情服务
//        InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
//        // 创建一个用户，用户名为admin，密码为123456，角色为Role_Admin
//        User user = new User("admin", "123456", Arrays.asList(new SimpleGrantedAuthority("Role_Admin")));
//        // 将用户添加到内存中的用户详情服务中
//        inMemoryUserDetailsManager.createUser(user);
//        // 返回用户详情服务
//        return inMemoryUserDetailsManager;
//    }

    /**
     * 密码加密
     * 如果密码明文存储在数据库中是非常不安全的
     * BCryptPasswordEncoder每次加密后的结果都是不同的，所以就不能够使用密文逆向出密码，是非常安全的
     * @return
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        // 返回BCryptPasswordEncoder实例
        return new BCryptPasswordEncoder();
    }


    public static void main(String[] args) {
        // 创建一个BCryptPasswordEncoder实例
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        //对密码进行加密
        String encode = bCryptPasswordEncoder.encode("1933732065");
        //输出加密后的密码
        System.out.println(encode);
//        System.out.println(bCryptPasswordEncoder.matches("123456",
//                "$2a$10$FpNxzjDGx.aVPFxwc36MT.Yra407q36kS4X1182Pir8p0GsyOyYL6"));
    }
}
